﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace DataSettings.Providers
{
    public class RegistroCommands
    {
        DataProvider _dataProvider;

        public RegistroCommands()
        {
            _dataProvider = new DataProvider();
        }

        public DataTable GetAutenticacao()
        {
            SqlCommand cmd = _dataProvider.CreateCommand();
            cmd.CommandText = "SELECT * FROM Autenticacao";
            return _dataProvider.GetTabelaCorrespondente(cmd);
        }

        public DataTable GetTiposEvento()
        {
            SqlCommand cmd = _dataProvider.CreateCommand();
            cmd.CommandText = "SELECT TipoEvento FROM TipoEvento";
            return _dataProvider.GetTabelaCorrespondente(cmd);
        }

        public DataTable GetListaEventos()
        {
            SqlCommand cmd = _dataProvider.CreateCommand();
            cmd.CommandText = string.Format("SELECT IDEvento, NomeEvento, DataEvento FROM Eventos;", DateTime.Today.ToString());
            return _dataProvider.GetTabelaCorrespondente(cmd);
        }

        public DataTable GetListaPacotesEvento(int idEvento)
        {
            SqlCommand cmd = _dataProvider.CreateCommand();
            cmd.CommandText = string.Format("SELECT Pacote, PrecoPacote FROM PrecosEvento WHERE(IDEvento = {0});", idEvento);
            return _dataProvider.GetTabelaCorrespondente(cmd);
        }

        public DataTable GetListaUsuarios(int idEvento)
        {
            SqlCommand cmd = _dataProvider.CreateCommand();
            cmd.CommandText = string.Format("SELECT * FROM Usuarios WHERE(IDEvento = {0});", idEvento);
            return _dataProvider.GetTabelaCorrespondente(cmd);
        }

        public int GetEventoID(string nomeEvento, string dataEvento)
        {
            int retorno = 0;

            SqlCommand cmd = _dataProvider.CreateCommand();
            cmd.CommandText = string.Format("SELECT IDEvento FROM Eventos WHERE(NomeEvento = '{0}' and DataEvento = '{1}');", nomeEvento, dataEvento);
            
            DataTable dt = _dataProvider.GetTabelaCorrespondente(cmd);

            if (dt.Rows.Count > 0)
            {
                retorno = int.Parse(dt.Rows[0][0].ToString());
            }

            return retorno;
        }

        public DataTable GetBuscaUsuario(int idEvento, string pedacoNome)
        {
            SqlCommand cmd = _dataProvider.CreateCommand();
            cmd.CommandText = string.Format("SELECT * FROM Usuarios WHERE(IDEvento = {0} and NomeUsuario LIKE '%{1}%');", idEvento, pedacoNome);
            return _dataProvider.GetTabelaCorrespondente(cmd);
        }

        public DataTable GetUsuarioID(int idEvento, string nomeUsuario)
        {
            SqlCommand cmd = _dataProvider.CreateCommand();
            cmd.CommandText = string.Format("SELECT IDUsuario FROM Usuarios WHERE(IDEvento = {0} and NomeUsuario = '{1}');", idEvento, nomeUsuario);
            return _dataProvider.GetTabelaCorrespondente(cmd);
        }

        public void CadastrarEvento(Evento evento)
        {
            SqlCommand cmd = _dataProvider.CreateCommand();

            //Inserindo dados na tabela Eventos
            cmd.Parameters.AddWithValue(@"NomeEvento", evento.NomeEvento);
            cmd.Parameters.AddWithValue(@"TipoEvento", int.Parse(evento.TipoEvento));
            cmd.Parameters.AddWithValue(@"DataEvento", evento.DataEvento);
            cmd.Parameters.AddWithValue(@"ImagemEvento", evento.DiretorioImagemEvento);
            cmd.Parameters.AddWithValue(@"NomePromotor", evento.NomePromotor);

            cmd.CommandText = "INSERT INTO Eventos(NomeEvento, TipoEvento, DataEvento, ImagemEvento, NomePromotor)" +
                "VALUES(@NomeEvento, @TipoEvento, @DataEvento, @ImagemEvento, @NomePromotor)";

            _dataProvider.ExecuteNonQuery(cmd);

            //Inserindo dados na tabela PrecosEvento
            //Pegando o ID do evento.
            int eventoID = this.GetEventoID(evento.NomeEvento, evento.DataEvento);

            for (int i = 0; i < evento.PacotesEvento.Count; i++ )
            {
                cmd = _dataProvider.CreateCommand();
                cmd.Parameters.AddWithValue(@"IDEvento", eventoID);
                cmd.Parameters.AddWithValue(@"Pacote", evento.PacotesEvento[i]);
                cmd.Parameters.AddWithValue(@"PrecoPacote", evento.PrecosPacotes[i]);

                cmd.CommandText = "INSERT INTO PrecosEvento(IDEvento, Pacote, PrecoPacote) VALUES(@IDEvento, @Pacote, @PrecoPacote)";

                _dataProvider.ExecuteNonQuery(cmd);
            }

            //Inserindo na tabela TelefonePromotores
            //como temos a variável eventoID guardada, temos que:

            for (int i = 0; i < evento.TelefonesPromotor.Count; i++)
            {
                cmd = _dataProvider.CreateCommand();
                cmd.Parameters.AddWithValue(@"IDEvento", eventoID);
                cmd.Parameters.AddWithValue(@"Telefone", evento.TelefonesPromotor[i]);

                cmd.CommandText = "INSERT INTO TelefonePromotores(IDEvento, Telefone) VALUES(@IDEvento, @Telefone)";

                _dataProvider.ExecuteNonQuery(cmd);
            }
        }

        private int VerificarPacoteID(string pacote)
        {
            int retorno = -1;
            if (!string.IsNullOrEmpty(pacote))
            {
                SqlCommand cmd = _dataProvider.CreateCommand();
                cmd.CommandText = string.Format("SELECT IDPacote FROM Pacotes WHERE(NomePacote = '{0}');", pacote);
                DataTable dt = _dataProvider.GetTabelaCorrespondente(cmd);

                retorno = int.Parse(dt.Rows[0][0].ToString());
            }
            return retorno;
        }

        public void CadastrarUsuario(int idEvento, string nomeUsuario, string serieUsuario, string statusPagamento, double valorPago, string pacote, int dependeDe)
        {
            int pacoteId = this.VerificarPacoteID(pacote);

            SqlCommand cmd = _dataProvider.CreateCommand();

            //Inserindo dados na tabela Eventos
            cmd.Parameters.AddWithValue(@"IDEvento", idEvento);
            cmd.Parameters.AddWithValue(@"NomeUsuario", nomeUsuario);
            cmd.Parameters.AddWithValue(@"SerieUsuario", serieUsuario);
            cmd.Parameters.AddWithValue(@"StatusPagamento", statusPagamento);
            cmd.Parameters.AddWithValue(@"ValorPago", valorPago);
            cmd.Parameters.AddWithValue(@"Pacote", pacoteId);
            cmd.Parameters.AddWithValue(@"Dependente", dependeDe);

            cmd.CommandText = "INSERT INTO Usuarios(IDEvento, NomeUsuario, SerieUsuario, StatusPagamento, ValorPago, Pacote, Dependente)" +
                "VALUES(@IDEvento, @NomeUsuario, @SerieUsuario, @StatusPagamento, @ValorPago, @Pacote, @Dependente)";

            _dataProvider.ExecuteNonQuery(cmd);
        }

        public void CadastrarDependente(int idUsuario, string nomeDependente)
        {
            SqlCommand cmd = _dataProvider.CreateCommand();

            //Inserindo dados na tabela Eventos
            cmd.Parameters.AddWithValue(@"IDUsuario", idUsuario);
            cmd.Parameters.AddWithValue(@"NomeDependente", nomeDependente);

            cmd.CommandText = "INSERT INTO Dependentes(IDUsuario, NomeDependente) VALUES(@IDUsuario, @NomeDependente)";

            _dataProvider.ExecuteNonQuery(cmd);
        }

        public void AtualizarUsuario(int idEvento, int idUsuario, string nomeUsuario, string serieUsuario, string statusPagamento, double valorPago)
        {
            SqlCommand cmd = _dataProvider.CreateCommand();

            //Atualizando dados na tabela Usuarios
            //cmd.Parameters.AddWithValue(@"IDEvento", idEvento);
            //cmd.Parameters.AddWithValue(@"NomeUsuario", nomeUsuario);
            //cmd.Parameters.AddWithValue(@"SerieUsuario", serieUsuario);
            //cmd.Parameters.AddWithValue(@"StatusPagamento", statusPagamento);
            //cmd.Parameters.AddWithValue(@"ValorPago", statusPagamento);

            cmd.CommandText = string.Format("UPDATE Usuarios SET NomeUsuario = '{0}', SerieUsuario = '{1}', StatusPagamento = '{2}', ValorPago = {3}" +
                " WHERE(IDEvento = {4} and IDUsuario = {5})", nomeUsuario, serieUsuario, statusPagamento, valorPago, idEvento, idUsuario);

            _dataProvider.ExecuteNonQuery(cmd);
        }

        //public void InsertPerson(CadastroPessoa pessoa)
        //{


        //    SqlCommand cmd = _dataProvider.CreateCommand();


        //    cmd.Parameters.AddWithValue(@"Evento", pessoa.EventoID);
        //    cmd.Parameters.AddWithValue(@"DataEvento", pessoa.DataEvento);
        //    cmd.Parameters.AddWithValue(@"Nome", pessoa.NomePessoa);
        //    cmd.Parameters.AddWithValue(@"Turma", pessoa.Turma);
        //    cmd.Parameters.AddWithValue(@"Status", pessoa.StatusPagamento);

        //    cmd.CommandText = "INSERT INTO CadastroPessoa VALUES(@Evento, @DataEvento, @Nome, @Turma, @Status)";

        //    _dataProvider.ExecuteNonQuery(cmd);
        //}

        //public void InsertEvent(CadastroEvento evento)
        //{
        //    SqlCommand cmd = _dataProvider.CreateCommand();

        //    cmd.Parameters.AddWithValue(@"NomeEvento", evento.NomeEvento);
        //    cmd.Parameters.AddWithValue(@"TipoEvento", evento.TipoEvento);
        //    cmd.Parameters.AddWithValue(@"DataEvento", evento.DataEvento);
        //    cmd.Parameters.AddWithValue(@"DirImagemEvento", evento.DirImagemEvento);
        //    cmd.Parameters.AddWithValue(@"Individual", evento.Individual);
        //    cmd.Parameters.AddWithValue(@"Especial", evento.Especial);
        //    cmd.Parameters.AddWithValue(@"Familia", evento.Familia);
        //    cmd.Parameters.AddWithValue(@"PrecoIndividual", evento.PrecoIndividual);
        //    cmd.Parameters.AddWithValue(@"PrecoEspecial", evento.PrecoEspecial);
        //    cmd.Parameters.AddWithValue(@"PrecoFamilia", evento.PrecoFamilia);
        //    cmd.Parameters.AddWithValue(@"NomePromotor", evento.NomePromotor);
        //    cmd.Parameters.AddWithValue(@"TelPromotor", evento.TelPromotor);

        //    cmd.CommandText = "INSERT INTO CadastroEvento VALUES(@NomeEvento, @TipoEvento, @DataEvento, @DirImagemEvento, @Individual, @Especial, @Familia, @PrecoIndividual, @PrecoEspecial, @PrecoFamilia, @NomePromotor, @TelPromotor)";

        //    _dataProvider.ExecuteNonQuery(cmd);
        //}

        //public List<DadosParaGridView> UpdateGrid()
        //{
        //    SqlCommand cmd = _dataProvider.CreateCommand();

        //    cmd.CommandText = "SELECT * FROM CadastroPessoa";

        //    return _dataProvider.ReturnData(cmd);
        //}

        //public DadosEvento[] EventsList()
        //{
        //    SqlCommand cmd = _dataProvider.CreateCommand();
        //    cmd.CommandText = "SELECT * FROM CadastroEvento";

        //    return _dataProvider.ReturnEventList(cmd);
        //}
    }
}
